package controllcivil.bean;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Calendar;

import javax.persistence.Column;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * Entidade responsavel por representar o consumo de uma determinada obra.
 * 
 * @author Rafael Altagnam
 * @version 1.0
 */
@javax.persistence.Entity
public class Consumo extends Entity implements Serializable{

	private static final long serialVersionUID = 1L;


	/**
	 *  Objeto referenciado a obra.
	 *  Muitos consumos possuiem uma obra.
	 */
	@ManyToOne (fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_OBRA")
	private Obra obra;
	
	
	/**
	 * Objeto referenciando a um Fornecedor de Material
	 * Muitos consumos pertecem a um forncedor de material.
	 */
	@ManyToOne (fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_FORN_MATERIAL")
	private FornecedorMaterial fornecedorMaterial;

	
	/**
	 * Atributo referenciando quando o consumo foi realizado.
	 */
	@Column(name = "data_consumo")
	@Temporal(TemporalType.TIMESTAMP)
	private Calendar dataConsumo;

	
	/**
	 * Atributo referenciando a quantidade de itens consumidos.
	 */
	@Column(name = "qtd_consumida")
	private Double quantidadeConsumida;

	
	/**
	 * Atributo indicando o valor total daquele consumo.
	 */
	@Column(name = "valor_total")
	private BigDecimal valorTotal;

	
	
	/**
	 * Construtor padrao.
	 */
	public Consumo() {

	}
	
	
	/**
	 * Construtor que recebe como parametro o ID do consumo.
	 */
	public Consumo(int id) {
		this.id = id;
	}
	
	
	/**
	 * Construtor utilizado pelo {@link IConsumo} para ser exibido na tela de consulta.
	 * 
	 * @param idObra
	 * @param descricaoObra
	 * @param dtConsumo
	 * @param valorTotal
	 */
	public Consumo(int idObra, String descricaoObra, Calendar dtConsumo, BigDecimal valorTotal) {
		this.obra = new Obra();
		this.obra.setId(idObra);
		this.obra.setDescricao(descricaoObra);
		this.dataConsumo = dtConsumo;
		this.valorTotal = valorTotal;
	}

	public Obra getObra() {
		return obra;
	}

	public void setObra(Obra obra) {
		this.obra = obra;
	}	

	public Double getQuantidadeConsumida() {
		return quantidadeConsumida;
	}

	public void setQuantidadeConsumida(Double quantidadeConsumida) {
		this.quantidadeConsumida = quantidadeConsumida;
	}

	public BigDecimal getValorTotal() {
		return valorTotal;
	}

	public void setValorTotal(BigDecimal valorTotal) {
		this.valorTotal = valorTotal;
	}

	public Calendar getDataConsumo() {
		return dataConsumo;
	}

	public void setDataConsumo(Calendar dataConsumo) {
		this.dataConsumo = dataConsumo;
	}

	public FornecedorMaterial getFornecedorMaterial() {
		return fornecedorMaterial;
	}

	public void setFornecedorMaterial(FornecedorMaterial fornecedorMaterial) {
		this.fornecedorMaterial = fornecedorMaterial;
	}


	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((dataConsumo == null) ? 0 : dataConsumo.hashCode());
		result = prime
				* result
				+ ((fornecedorMaterial == null) ? 0 : fornecedorMaterial
						.hashCode());
		result = prime * result + ((obra == null) ? 0 : obra.hashCode());
		result = prime
				* result
				+ ((quantidadeConsumida == null) ? 0 : quantidadeConsumida
						.hashCode());
		result = prime * result
				+ ((valorTotal == null) ? 0 : valorTotal.hashCode());
		return result;
	}


	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		
		if (this.id == ((Consumo)obj).id){
			return true;
		}
		
		return false;
		
	}


	@Override
	public String toString() {
		return "Consumo [id= "+ id +" obra=" + obra.getDescricao() + ", valorTotal=" + valorTotal + "]";
	}
	
	
	
	
	
	

}
